﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ElectronicsMarket.EMServices;
using ElectronicsMarket.Models;
using ElectronicsMarket.InternalService;
using System.Text;

namespace ElectronicsMarket.Controllers
{
    public class CartController : Controller
    {
        protected internal static Cart cart = new Cart();
        private ServicesReleaseSoapClient serviceRelease;

        public CartController()
        {
            serviceRelease = new ServicesReleaseSoapClient();
        }

        public ViewResult Index()
        {
            CartIndexViewModel cartIndexViewModel = new CartIndexViewModel();
            cartIndexViewModel.Cart = cart;
            return View(cartIndexViewModel);
        }

        public RedirectToRouteResult AddToCart(long productId, int quantity)
        {
            PRODUCT product = serviceRelease.getProductById(productId);
            if (product != null)
            {
                if (Session["Username"] == null)
                {
                    cart.AddItem(product, quantity);
                }
                else
                {

                    Cart cartSession = (Cart)Session["Cart"];
                    if (cartSession == null)
                    {
                        cart.AddItem(product, quantity);
                        Session.Add("Cart", cart);
                    }
                    else
                    {
                        cartSession.AddItem(product, quantity);
                    }
                }
            }
            return RedirectToAction("Index");
        }

        public RedirectToRouteResult RemoveFromCart(int productId)
        {
            Cart cartSession = (Cart)Session["Cart"];
            PRODUCT product = serviceRelease.getProductById(productId);
            if (cartSession == null)
            {
                CartItem cartItem = cart.ItemCollection.Where(i => i.Product.PRODUCT_ID == productId).FirstOrDefault();
                if (cartItem != null)
                {
                    cart.RemoveItems(product);
                }
            }
            else
            {
                CartItem cartItem = cartSession.ItemCollection.Where(i => i.Product.PRODUCT_ID == productId).FirstOrDefault();
                if (cartItem != null)
                {
                    cartSession.RemoveItems(product);
                }
            }
            return RedirectToAction("Index");
        }

        public ViewResult CartSummary()
        {
            Cart cartSession = (Cart)Session["Cart"];
            if (cartSession != null)
            {
                return View(cartSession);
            }
            return View(cart);
        }

        public ViewResult CheckOut(Cart cart)
        {
            CUSTOMER customer = serviceRelease.getUserById(int.Parse(Session["UserId"].ToString()));
            return View(customer);
        }

        [HttpPost]
        public ViewResult CheckOutResult()
        {
            bool result = false;
            CUSTOMER customer = serviceRelease.getUserById(int.Parse(Session["UserId"].ToString()));
            LogService.WriteLog(1, serviceRelease.getLastOrderId().ToString());
            long orderId = serviceRelease.getLastOrderId() + 1;
            serviceRelease.createNewOrder(customer.CUSTOMER_ID, orderId);
            Cart cart = getCart();
            foreach (var item in cart.ItemCollection)
            {
                serviceRelease.addNewOrderDetail(orderId, item.Product.PRODUCT_ID, item.Quantity, item.Quantity * item.Product.PRODUCT_PRICE); 
            }
            MailService.SendMailToAddress(customer.CUSTOMER_EMAIL, "Xác nhận đặt hàng thành công", createCheckOutMailContent(cart));
            Session["Cart"] = null;
            cart.Clear();
            result = true;
            return View(result);
        }

        private Cart getCart()
        {
            Cart cartSession = (Cart)Session["Cart"];
            if (cartSession != null)
            {
                return cartSession;
            }
            return cart;
        }

        private string createCheckOutMailContent(Cart cart)
        {
            StringBuilder contentBuilder = new StringBuilder();
            contentBuilder.Append("<p><h3>Chúc mừng bạn đã đặt hàng thành công</h3> <br />");
            contentBuilder.Append("Vui lòng gọi điện thoại đến số 08 39 910 000 để được chúng tôi giao hàng tận nơi! <br />");
            contentBuilder.Append("Bạn đã mua ");
            contentBuilder.Append(cart.ItemCollection.Count.ToString());
            contentBuilder.Append(" sản phẩm. Chi tiết như sau: <br /></p><ul>");
            foreach (var item in cart.ItemCollection.ToList())
	        {
                contentBuilder.Append("<li>" + item.Product.PRODUCT_NAME + " với số lượng " + item.Quantity.ToString() + "</li><br />");
	        }
            contentBuilder.Append("</ul><h4>Tổng số tiền: " + cart.GetTotalValue().ToString("0.0") + "</h4><br />");
            contentBuilder.Append("Chân thành cảm ơn bạn đã ủng hộ cho Chợ điện máy LTC! <br /><br />");
            contentBuilder.Append("Ban quản trị chợ điện máy Long Tú Ca <br />");
            return contentBuilder.ToString();
        }
    }
}
